/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.common.components</code> contiene las clases
 * que representan a controles de GUI.
 */
package edu.uoc.tds.pec4.common.components;

import edu.uoc.tds.pec4.common.util.Cabecera;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable; 

/**
 * La clase <code>TablaUI</code> extiende la clase JTable para devolver un objeto
 * de ese tipo pero ya con el modelo de tabla creado, y con el tamaño de las 
 * columnas ya configurado.
 *
 * @author	Luis Rodríguez-Manzaneque Sánchez
 * @version	22/11/2011
 * @since	1.00
 * @see         TableModelUI
 */
public class TablaUI extends JTable {

    private TableModelUI model;
    private List<String> cabeceras;
    private List<List> filas;
    private int[] anchoCols;

    public TablaUI() {
    }

    /**
     * Constructor de la clase con parámetros
     *
     * @param   cabeceras Lista de objetos Cabecera con el titulo y tamaño de las columnas
     * @param   filas Estructura de listas con las filas de la tabla
     */
    public TablaUI(List<Cabecera> listCabeceras, List<List> filas) {
        super();
        this.cabeceras = new ArrayList<String>();
        anchoCols=new int[listCabeceras.size()];
        for (int i=0;i<listCabeceras.size();i++) {
            this.cabeceras.add(listCabeceras.get(i).getNombre());
            anchoCols[i]=listCabeceras.get(i).getAncho();
        }
        this.filas=filas;
        montarCabeceraFilas();
    }

    /**
     * Constructor de la clase con parámetros
     *
     * @param   cabeceras Lista de texto con las cabeceras de las columnas
     * @param   filas Estructura de listas con las filas de la tabla
     * @param   anchoCols array de enteros con el ancho de las columnas
     */
    public TablaUI(List<String> cabeceras, List<List> filas, int[] anchoCols) {
        super();
        this.cabeceras=cabeceras;
        this.filas=filas;
        this.anchoCols=anchoCols;
        
        montarCabeceraFilas();
        asignarAnchoColumnas();
    }

    public void setFilas(List<List> filas) {
        this.filas = filas;
    }

    /**
     * Introduce las filas que se han enviado por última vez, refrescando la GUI
     *
     */
    public void refrescarFilas() {
        montarCabeceraFilas();
        asignarAnchoColumnas();
    }

    /**
     * Crea el TableModel a través de la clase TableModelUI, simplificando su
     * creación
     *
     */
    private void montarCabeceraFilas() {
        model = new TableModelUI(cabeceras, filas);

        this.setModel(model);

        // Hacemos la tabla ordenable:
        this.setAutoCreateRowSorter(true);
    }
    
    /**
     * Asigna el ancho correspondiente a cada columna
     */
    private void asignarAnchoColumnas() {
        //Asignamos el ancho de cada columna
        for (int i = 0; i < anchoCols.length; i++) {
            this.getColumnModel().getColumn(i).setPreferredWidth(anchoCols[i]);
        }
    }
            
}
